import { run_test } from '../test-harness';

run_test([
  'x=quote(x)',
  '',

  'f=quote(f)',
  '',

  'g=quote(g)',
  '',

  'd(a,x)',
  '0',

  'd(x,x)',
  '1',

  'd(x^2,x)',
  '2*x',

  'd(log(x),x)',
  '1/x',

  'd(exp(x),x)',
  'exp(x)',

  'd(a^x,x)',
  'a^x*log(a)',

  'd(x^x,x)-(x^x+x^x*log(x))',
  '0',

  'd(log(x^2+5),x)-(2*x/(5+x^2))',
  '0',

  'd(d(f(x),x),y)',
  '0',

  'd(d(f(x),y),x)',
  '0',

  'd(d(f(y),x),y)',
  '0',

  'd(d(f(y),y),x)',
  '0',

  'd([x*y*z,y,x+z],[x,y,z])',
  '[[y*z,x*z,x*y],[0,1,0],[1,0,1]]',

  'd(x+z,[x,y,z])',
  '[1,0,1]',

  'd(cos(theta)^2,cos(theta))',
  '2*cos(theta)',

  'd(f())',
  'd(f(),x)',

  'd(x^2)',
  '2*x',

  'd(t^2)',
  '2*t',

  'd(t^2 x^2)',
  '2*t^2*x',

  // trig functions

  'd(sin(x),x)-cos(x)',
  '0',

  'd(cos(x),x)+sin(x)',
  '0',

  'd(tan(x),x)-cos(x)^(-2)',
  '0',

  'd(arcsin(x),x)-1/sqrt(1-x^2)',
  '0',

  'd(arccos(x),x)+1/sqrt(1-x^2)',
  '0',

  'd(arctan(x),x)-1/(1+x^2)',
  '0',

  'd(arctan(y/x),x)',
  '-y/(x^2+y^2)',

  'd(arctan(y/x),y)',
  'x/(x^2+y^2)',

  // hyp functions

  'd(sinh(x),x)-cosh(x)',
  '0',

  'd(cosh(x),x)-sinh(x)',
  '0',

  'd(tanh(x),x)-cosh(x)^(-2)',
  '0',

  'd(arcsinh(x),x)-1/sqrt(x^2+1)',
  '0',

  'd(arccosh(x),x)-1/sqrt(x^2-1)',
  '0',

  'd(arctanh(x),x)-1/(1-x^2)',
  '0',

  'd(sin(cos(x)),x)+cos(cos(x))*sin(x)',
  '0',

  'd(sin(x)^2,x)-2*sin(x)*cos(x)',
  '0',

  'd(sin(cos(x)),cos(x))-cos(cos(x))',
  '0',

  'd(abs(x),x)',
  'sgn(x)',

  'd(sgn(x),x)',
  '2*dirac(x)',

  // generic functions

  'd(f(),x)',
  'd(f(),x)',

  'd(f(x),x)',
  'd(f(x),x)',

  'd(f(y),x)',
  '0',

  'd(g(f(x)),f(x))',
  'd(g(f(x)),f(x))',

  'd(g(f(x)),x)',
  'd(g(f(x)),x)',

  // other functions

  'd(erf(x))-2*exp(-x^2)/sqrt(pi)',
  '0',

  // arg lists

  'f=x^5*y^7',
  '',

  'd(f)',
  '5*x^4*y^7',

  'd(f,x)',
  '5*x^4*y^7',

  'd(f,x,0)',
  'x^5*y^7',

  'd(f,x,1)',
  '5*x^4*y^7',

  'd(f,x,2)',
  '20*x^3*y^7',

  'd(f,2)',
  '20*x^3*y^7',

  'd(f,2,y)',
  '140*x^3*y^6',

  'd(f,x,x,y,y)',
  '840*x^3*y^5',

  'f=quote(f)',
  '',
]);
